package csu.edu.flatprogram.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import csu.edu.flatprogram.common.CommonResponse;
import csu.edu.flatprogram.entity.Cart;
import csu.edu.flatprogram.entity.Item;
import csu.edu.flatprogram.entity.Product;
import csu.edu.flatprogram.persistence.CartMapper;
import csu.edu.flatprogram.persistence.ItemMapper;
import csu.edu.flatprogram.persistence.ProductMapper;
import csu.edu.flatprogram.service.CartService;
import csu.edu.flatprogram.vo.CartItemVO;
import csu.edu.flatprogram.vo.CartVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Service("cartService")
public class CartServiceImpl implements CartService {
    @Autowired
    CartMapper cartMapper;
    @Autowired
    CartVO cartVO;
    @Autowired
    CartItemVO cartItemVO;
    @Autowired
    ItemMapper itemMapper;
    @Autowired
    ProductMapper productMapper;

    @Override
    public CommonResponse<CartVO> getCartItemByUserid(String userid){
        QueryWrapper<Cart> cartQueryWrapper = new QueryWrapper<>();
        cartQueryWrapper.eq("userid",userid);
        List<Cart> cartList = cartMapper.selectList(cartQueryWrapper);
        if (cartList.isEmpty()){
            return CommonResponse.createForSuccessMessage("心愿单为空");
        }
        List<CartItemVO> cartItemVOList = new ArrayList<>();
        for (int i = 0;i<cartList.size();i++){
            //cart中属性
            cartItemVO.setUserid(cartList.get(i).getUserid());
            cartItemVO.setItemid(cartList.get(i).getItemid());
            cartItemVO.setProductid(cartList.get(i).getProductid());
            cartItemVO.setDescription(cartList.get(i).getDescription());
            cartItemVO.setInstock(cartList.get(i).getInstock());
            cartItemVO.setQuantity(cartList.get(i).getQuantity());
            cartItemVO.setListprice(cartList.get(i).getListprice());
            cartItemVO.setTotalprice(cartList.get(i).getTotalprice());
            //item中的属性
            //查出对应itemid的item
            Item item = itemMapper.selectById(cartList.get(i).getItemid());
            cartItemVO.setUnitCost(item.getUnitCost());
            cartItemVO.setStatus(item.getStatus());
            cartItemVO.setAttribute1(item.getAttribute1());
            cartItemVO.setDescn(item.getDescn());
            cartItemVO.setDescnpic(item.getDescnpic());
            cartItemVO.setItemName(item.getItemName());
            //product中的属性
            //查出对应productid的product
            Product product = productMapper.selectById(cartList.get(i).getProductid());
            cartItemVO.setCategoryId(product.getCategoryId());
            cartItemVO.setName(product.getName());
            cartItemVOList.add(cartItemVO);
        }
        cartVO.setCartList(cartItemVOList);
        return CommonResponse.createForSuccess(cartVO);
    }
    @Override
    public CommonResponse<CartVO> insertCartItem(Cart cart){
        //判断是否已存在此商品
        QueryWrapper<Cart> cartQueryWrapper =  new QueryWrapper<>();
        cartQueryWrapper.and(wrapper -> wrapper.eq("userid",cart.getUserid()).eq("itemid",cart.getItemid()));
        Cart cartresult = cartMapper.selectOne(cartQueryWrapper);
        if(cartresult == null){
            //不存在此商品
            cartMapper.insert(cart);
        }else{
            //存在此商品
            //更新数据库中商品数量+1
            cartresult.setQuantity(cartresult.getQuantity()+1);
            //更新数据库
            cartMapper.update(cartresult,cartQueryWrapper);
        }
        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid",cart.getUserid());
        List<Cart> cartList = cartMapper.selectList(queryWrapper);
        if(cartList.isEmpty()){
            return CommonResponse.createForSuccessMessage("心愿单为空");
        }
        List<CartItemVO> cartItemVOList = new ArrayList<>();
        for (int i = 0;i<cartList.size();i++){
            //cart中的属性
            cartItemVO.setUserid(cartList.get(i).getUserid());
            cartItemVO.setItemid(cartList.get(i).getItemid());
            cartItemVO.setProductid(cartList.get(i).getProductid());
            cartItemVO.setDescription(cartList.get(i).getDescription());
            cartItemVO.setInstock(cartList.get(i).getInstock());
            cartItemVO.setQuantity(cartList.get(i).getQuantity());
            cartItemVO.setListprice(cartList.get(i).getListprice());
            cartItemVO.setTotalprice(cartList.get(i).getTotalprice());
            //item中的属性
            //查出对应itemid的item
            Item item = itemMapper.selectById(cartList.get(i).getItemid());
            cartItemVO.setUnitCost(item.getUnitCost());
            cartItemVO.setStatus(item.getStatus());
            cartItemVO.setAttribute1(item.getAttribute1());
            cartItemVO.setDescn(item.getDescn());
            cartItemVO.setDescnpic(item.getDescnpic());
            cartItemVO.setItemName(item.getItemName());
            //product中的属性
            //查出对应productid的product
            Product product = productMapper.selectById(cartList.get(i).getProductid());
            cartItemVO.setCategoryId(product.getCategoryId());
            cartItemVO.setName(product.getName());
            cartItemVOList.add(cartItemVO);
        }
        cartVO.setCartList(cartItemVOList);
        return CommonResponse.createForSuccess(cartVO);
    }
    @Override
    public CommonResponse<BigDecimal> updateQuantity(String userid,int quantity,String itemId){
        //从数据库中查找
        QueryWrapper<Cart> cartQueryWrapper = new QueryWrapper<>();
        cartQueryWrapper.and(wrapper -> wrapper.eq("userid",userid).eq("itemid",itemId));
        Cart cart = cartMapper.selectOne(cartQueryWrapper);
        if (cart == null){
            return CommonResponse.createForSuccessMessage("购物车中没有该商品");
        }
        //将cart中的数量修改
        cart.setQuantity(quantity);
        cart.setTotalprice(cart.getListprice().multiply(new BigDecimal(quantity)));
        //更新数据库
        cartMapper.update(cart,cartQueryWrapper);
        return CommonResponse.createForSuccess(cart.getTotalprice());
    }

    @Override
    public CommonResponse<Cart> deleteByUserid(String userid) {
        //清空购物车
        QueryWrapper<Cart> cartQueryWrapper = new QueryWrapper<>();
        cartQueryWrapper.eq("userid",userid);
        cartMapper.delete(cartQueryWrapper);
        return CommonResponse.createForSuccessMessage("清空成功");
    }

    @Override
    public CommonResponse<CartVO> deleteCartitemByUserid(String userid,String itemid) {
        //删除指定item
        QueryWrapper<Cart> cartQueryWrapper = new QueryWrapper<>();
        cartQueryWrapper.and(wrapper -> wrapper.eq("userid",userid).eq("itemid",itemid));
        cartMapper.delete(cartQueryWrapper);
        //重新获取cartlist
        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid",userid);
        List<Cart> cartList = cartMapper.selectList(queryWrapper);
        if (cartList.isEmpty()){
            return CommonResponse.createForSuccessMessage("购物车为空");
        }
        List<CartItemVO> cartItemVOList = new ArrayList<>();
        for (int i = 0;i<cartList.size();i++){
            //cart中的属性
            cartItemVO.setUserid(cartList.get(i).getUserid());
            cartItemVO.setItemid(cartList.get(i).getItemid());
            cartItemVO.setProductid(cartList.get(i).getProductid());
            cartItemVO.setDescription(cartList.get(i).getDescription());
            cartItemVO.setInstock(cartList.get(i).getInstock());
            cartItemVO.setQuantity(cartList.get(i).getQuantity());
            cartItemVO.setListprice(cartList.get(i).getListprice());
            cartItemVO.setTotalprice(cartList.get(i).getTotalprice());
            //item中的属性
            //查出对应itemid的item
            Item item = itemMapper.selectById(cartList.get(i).getItemid());
            cartItemVO.setUnitCost(item.getUnitCost());
            cartItemVO.setStatus(item.getStatus());
            cartItemVO.setAttribute1(item.getAttribute1());
            cartItemVO.setDescn(item.getDescn());
            cartItemVO.setDescnpic(item.getDescnpic());
            cartItemVO.setItemName(item.getItemName());
            //product中的属性
            //查出对应productid的product
            Product product = productMapper.selectById(cartList.get(i).getProductid());
            cartItemVO.setCategoryId(product.getCategoryId());
            cartItemVO.setName(product.getName());
            cartItemVOList.add(cartItemVO);
        }
        cartVO.setCartList(cartItemVOList);
        return CommonResponse.createForSuccess(cartVO);
    }
}